package database

import (
	"douhu_backend/internal/config"
	"douhu_backend/internal/db/tidb"
	"fmt"
	"sync"

	"gorm.io/gorm"
)

var (
	instance *gorm.DB
	once     sync.Once
)

// Init 初始化数据库连接（单例模式）
func Init() error {
	var err error
	once.Do(func() {
		instance, err = tidb.NewDB()
	})
	return err
}

// GetDB 获取数据库实例
func GetDB() *gorm.DB {
	if instance == nil {
		panic("database not initialized, please call Init() first")
	}
	return instance
}

// Close 关闭数据库连接
func Close() error {
	if instance == nil {
		return nil
	}
	sqlDB, err := instance.DB()
	if err != nil {
		return fmt.Errorf("failed to get sql.DB: %w", err)
	}
	return sqlDB.Close()
}

// AutoMigrate 自动迁移数据库表
func AutoMigrate(models ...interface{}) error {
	if instance == nil {
		return fmt.Errorf("database not initialized")
	}
	return instance.AutoMigrate(models...)
}

// IsInitialized 检查数据库是否已初始化
func IsInitialized() bool {
	return instance != nil
}

// GetConfig 获取数据库配置
func GetConfig() interface{} {
	return config.Conf.DB
}
